home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 1.iso / HENSA / MATHS / PLPLOT / PLPLOT.ZIP / sys / amiga / old / plmenu.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-16  |  13.7 KB  |  692 lines

  1. /* $Id: plmenu.c,v 1.1 1993/03/15 21:30:55 mjl Exp $
  2.    $Log: plmenu.c,v $
  3.  * Revision 1.1  1993/03/15  21:30:55  mjl
  4.  * Files shuffled around in the Amiga driver reorganization.
  5.  *
  6.  * Revision 1.2  1992/10/12  17:11:24  mjl
  7.  * Amiga-specific mods, including ANSI-fication.
  8.  *
  9.  * Revision 1.1  1992/05/20  21:35:26  furnish
  10.  * Initial checkin of the whole PLPLOT project.
  11.  *
  12. */
  13.  
  14. #include "plplot.h"
  15. #include <stdio.h>
  16. #include <math.h>
  17. #include "plamiga.h"
  18.  
  19. void 
  20. eventwait(void)
  21. {
  22.     for (;;) {
  23.     /* Wait for message */
  24.     Wait(1 << PLWindow->UserPort->mp_SigBit);
  25.     if (procmess())
  26.         return;
  27.     }
  28. }
  29.  
  30. PLINT 
  31. procmess(void)
  32. {
  33.     ULONG class;
  34.     USHORT code;
  35.     struct IntuiMessage *message;
  36.  
  37.     while (message = (struct IntuiMessage *) GetMsg(PLWindow->UserPort)) {
  38.     class = message->Class;
  39.     code = message->Code;
  40.     ReplyMsg((struct Message *) message);
  41.     if (eventhandler(class, code))
  42.         return ((PLINT) 1);
  43.     }
  44.     return ((PLINT) 0);
  45. }
  46.  
  47. PLINT 
  48. eventhandler(ULONG class, USHORT code)
  49. {
  50.     switch (class) {
  51.     case CLOSEWINDOW:
  52.     return ((PLINT) 1);
  53.     case MENUPICK:
  54.     menuselect(class, code);
  55.     break;
  56.     case SIZEVERIFY:
  57.     break;
  58.     case NEWSIZE:
  59.     if (!(PLCurPrefs.WinType & PLCUST)) {
  60.         PLCurPrefs.WWidth = PLWindow->Width;
  61.         PLCurPrefs.WHeight = PLWindow->Height;
  62.     }
  63.     else {
  64.         PLCurPrefs.CWidth = PLWindow->Width;
  65.         PLCurPrefs.CHeight = PLWindow->Height;
  66.     }
  67.     setlimits();
  68.     disablegads(0);
  69.     disablemenus();
  70.     remakeplot();
  71.     enablemenus();
  72.     enablegads();
  73.     break;
  74.     default:
  75.     break;
  76.     }
  77.  
  78.     return ((PLINT) 0);
  79. }
  80.  
  81. struct IntuiText IText0ItemScrSubs[] =
  82. {
  83.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "WorkBench", NULL},
  84.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "Custom", NULL}
  85. };
  86.  
  87. struct MenuItem Menu0ItemScrSubs[] =
  88. {
  89.     {
  90.     &Menu0ItemScrSubs[1],
  91.     0, 0, 0, 0,
  92.     ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  93.     0xFFFE,
  94.     (APTR) & IText0ItemScrSubs[0],
  95.     NULL,
  96.     NULL,
  97.     NULL,
  98.     NULL
  99.     },
  100.     {
  101.     NULL,
  102.     0, 0, 0, 0,
  103.     ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  104.     0xFFFD,
  105.     (APTR) & IText0ItemScrSubs[1],
  106.     NULL,
  107.     NULL,
  108.     NULL,
  109.     NULL
  110.     }
  111. };
  112.  
  113. struct IntuiText IText0ItemPriSubs[] =
  114. {
  115.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "Bitmap Dump", NULL},
  116.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "Full Page (Landscape)", NULL},
  117.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "Full Page (Portrait)", NULL}
  118. };
  119.  
  120. struct MenuItem Menu0ItemPriSubs[] =
  121. {
  122.     {
  123.     &Menu0ItemPriSubs[1],
  124.     0, 0, 0, 0,
  125.     ITEMTEXT | ITEMENABLED | HIGHCOMP,
  126.     NULL,
  127.     (APTR) & IText0ItemPriSubs[0],
  128.     NULL,
  129.     NULL,
  130.     NULL,
  131.     NULL
  132.     },
  133.     {
  134.     &Menu0ItemPriSubs[2],
  135.     0, 0, 0, 0,
  136.     ITEMTEXT | ITEMENABLED | HIGHCOMP,
  137.     NULL,
  138.     (APTR) & IText0ItemPriSubs[1],
  139.     NULL,
  140.     NULL,
  141.     NULL,
  142.     NULL
  143.     },
  144.     {
  145.     NULL,
  146.     0, 0, 0, 0,
  147.     ITEMTEXT | ITEMENABLED | HIGHCOMP,
  148.     NULL,
  149.     (APTR) & IText0ItemPriSubs[2],
  150.     NULL,
  151.     NULL,
  152.     NULL,
  153.     NULL
  154.     }
  155. };
  156.  
  157. struct IntuiText IText0[] =
  158. {
  159.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "Save Configuration", NULL},
  160.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "Reset", NULL},
  161.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "Maintain Plot Aspect", NULL},
  162.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "Redraw Enabled", NULL},
  163.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "Select Screen Type", NULL},
  164.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "Print", NULL},
  165.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "Save Bitmap as IFF file", NULL}
  166. };
  167.  
  168. struct MenuItem Menu0Items[] =
  169. {
  170.     {
  171.     &Menu0Items[1],
  172.     0, 0, 0, 0,
  173.     ITEMTEXT | ITEMENABLED | HIGHCOMP,
  174.     0,
  175.     (APTR) & IText0[0],
  176.     NULL,
  177.     NULL,
  178.     NULL,
  179.     NULL
  180.     },
  181.     {
  182.     &Menu0Items[2],
  183.     0, 0, 0, 0,
  184.     ITEMTEXT | ITEMENABLED | HIGHCOMP,
  185.     0,
  186.     (APTR) & IText0[1],
  187.     NULL,
  188.     NULL,
  189.     NULL,
  190.     NULL
  191.     },
  192.     {
  193.     &Menu0Items[3],
  194.     0, 0, 0, 0,
  195.     ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | MENUTOGGLE,
  196.     0,
  197.     (APTR) & IText0[2],
  198.     NULL,
  199.     NULL,
  200.     NULL,
  201.     NULL
  202.     },
  203.     {
  204.     &Menu0Items[4],
  205.     0, 0, 0, 0,
  206.     ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | MENUTOGGLE,
  207.     0,
  208.     (APTR) & IText0[3],
  209.     NULL,
  210.     NULL,
  211.     NULL,
  212.     NULL
  213.     },
  214.     {
  215.     &Menu0Items[5],
  216.     0, 0, 0, 0,
  217.     ITEMTEXT | ITEMENABLED | HIGHCOMP,
  218.     0,
  219.     (APTR) & IText0[4],
  220.     NULL,
  221.     NULL,
  222.     &Menu0ItemScrSubs[0],
  223.     NULL
  224.     },
  225.     {
  226.     &Menu0Items[6],
  227.     0, 0, 0, 0,
  228.     ITEMTEXT | ITEMENABLED | HIGHCOMP,
  229.     0,
  230.     (APTR) & IText0[5],
  231.     NULL,
  232.     NULL,
  233.     &Menu0ItemPriSubs[0],
  234.     NULL
  235.     },
  236.     {
  237.     NULL,
  238.     0, 0, 0, 0,
  239.     ITEMTEXT | ITEMENABLED | HIGHCOMP,
  240.     0,
  241.     (APTR) & IText0[6],
  242.     NULL,
  243.     NULL,
  244.     NULL,
  245.     NULL
  246.     }
  247. };
  248.  
  249. struct IntuiText IText1Item2Subs[] =
  250. {
  251.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) " 2", NULL},
  252.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) " 4", NULL},
  253.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) " 8", NULL},
  254.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "16", NULL}
  255. };
  256.  
  257. struct MenuItem Menu1Item2Subs[] =
  258. {
  259.     {
  260.     &Menu1Item2Subs[1],
  261.     0, 0, 0, 0,
  262.     ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  263.     0xFFFE,
  264.     (APTR) & IText1Item2Subs[0],
  265.     NULL,
  266.     NULL,
  267.     NULL,
  268.     NULL
  269.     },
  270.     {
  271.     &Menu1Item2Subs[2],
  272.     0, 0, 0, 0,
  273.     ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  274.     0xFFFD,
  275.     (APTR) & IText1Item2Subs[1],
  276.     NULL,
  277.     NULL,
  278.     NULL,
  279.     NULL
  280.     },
  281.     {
  282.     &Menu1Item2Subs[3],
  283.     0, 0, 0, 0,
  284.     ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  285.     0xFFFB,
  286.     (APTR) & IText1Item2Subs[2],
  287.     NULL,
  288.     NULL,
  289.     NULL,
  290.     NULL
  291.     },
  292.     {
  293.     NULL,
  294.     0, 0, 0, 0,
  295.     ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  296.     0xFFF7,
  297.     (APTR) & IText1Item2Subs[3],
  298.     NULL,
  299.     NULL,
  300.     NULL,
  301.     NULL
  302.     }
  303. };
  304.  
  305. struct IntuiText IText1[] =
  306. {
  307.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "Interlaced", NULL},
  308.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "High Resolution", NULL},
  309.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "Number of Colors", NULL},
  310.     {0, 1, JAM1, 0, 0, NULL, (UBYTE *) "Set Color Palette", NULL}
  311. };
  312.  
  313.  
  314. struct MenuItem Menu1Items[] =
  315. {
  316.     {
  317.     &Menu1Items[1],
  318.     0, 0, 0, 0,
  319.     ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | MENUTOGGLE,
  320.     0,
  321.     (APTR) & IText1[0],
  322.     NULL,
  323.     NULL,
  324.     NULL,
  325.     NULL
  326.     },
  327.     {
  328.     &Menu1Items[2],
  329.     0, 0, 0, 0,
  330.     ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | MENUTOGGLE,
  331.     0,
  332.     (APTR) & IText1[1],
  333.     NULL,
  334.     NULL,
  335.     NULL,
  336.     NULL
  337.     },
  338.     {
  339.     &Menu1Items[3],
  340.     0, 0, 0, 0,
  341.     ITEMTEXT | ITEMENABLED | HIGHCOMP,
  342.     0,
  343.     (APTR) & IText1[2],
  344.     NULL,
  345.     NULL,
  346.     &Menu1Item2Subs[0],
  347.     NULL
  348.     },
  349.     {
  350.     NULL,
  351.     0, 0, 0, 0,
  352.     ITEMTEXT | ITEMENABLED | HIGHCOMP,
  353.     0,
  354.     (APTR) & IText1[3],
  355.     NULL,
  356.     NULL,
  357.     NULL,
  358.     NULL
  359.     }
  360. };
  361.  
  362. struct Menu Menu[] =
  363. {
  364.     {
  365.     &Menu[1],
  366.     0, 0, 0, 0,
  367.     MENUENABLED,
  368.     "PLPlot",
  369.     &Menu0Items[0]
  370.     },
  371.     {
  372.     NULL,
  373.     0, 0, 0, 0,
  374.     MENUENABLED,
  375.     "Screen Format",
  376.     &Menu1Items[0]
  377.     }
  378. };
  379.  
  380. enum menus {
  381.     PLMCONTROL, PLMSCREEN
  382. };
  383.  
  384. /* Control menu items */
  385. enum menu0items {
  386.     PLMSAVECONFIG, PLMRECONFIG, PLMASPECT, PLMBUFF,
  387.     PLMSCREENTYPE, PLMSCRDUMP, PLMSIFF
  388. };
  389. enum menu0itemscrsubs {
  390.     PLMWBENCH, PLMCUSTOM
  391. };
  392. enum menu0itemprisubs {
  393.     PLMPRWIN, PLMPRPLAN, PLMPRPPOR
  394. };
  395.  
  396. /* Custom screen menu items */
  397. enum menu1items {
  398.     PLMLACE, PLMHIRES, PLMCOLORS, PLMCOLREQ
  399. };
  400.  
  401. /* Number color subitems */
  402. enum menu1item2subs {
  403.     PLMC2, PLMC4, PLMC8, PLMC16
  404. };
  405.  
  406. void 
  407. MakePLMenu(void)
  408. {
  409.     short mtx, mledge;
  410.     short itx, itxlen, itedge, ichk;
  411.     short stx, stxlen, stedge, schk;
  412.     short fheight;
  413.     char *string;
  414.     struct Menu *menu;
  415.     struct MenuItem *item, *subitem;
  416.     struct IntuiText *itext;
  417.  
  418.     fheight = PLScreen->Font->ta_YSize;
  419.  
  420.     if (PLCurPrefs.WinType & PLCUST)
  421.     Menu[0].NextMenu = &Menu[1];
  422.     else
  423.     Menu[0].NextMenu = NULL;
  424.  
  425.     mledge = 0;
  426.     for (menu = Menu; menu != NULL; menu = menu->NextMenu) {
  427.     string = (char *) menu->MenuName;
  428.     mtx = (short) TextLength(PLSRPort, string, (long) strlen(string));
  429.     /* Leave two character space between menus */
  430.     mtx += (2 * mtx) / strlen(string);
  431.     menu->LeftEdge = mledge;
  432.     menu->Width = mtx;
  433.     mledge += mtx;
  434.  
  435.     /* Find length of longest menuitem in this menu */
  436.     itxlen = 0;
  437.     ichk = 0;
  438.     for (item = menu->FirstItem; item != NULL; item = item->NextItem) {
  439.         itext = (struct IntuiText *) item->ItemFill;
  440.         string = (char *) itext->IText;
  441.         itx = (short) TextLength(PLSRPort, string, (long) strlen(string));
  442.         itxlen = MAX(itxlen, itx);
  443.         if (item->Flags & CHECKIT)
  444.         ichk = 1;
  445.     }
  446.     itedge = 0;
  447.     for (item = menu->FirstItem; item != NULL; item = item->NextItem) {
  448.         item->Width = itxlen;
  449.         item->LeftEdge = 0;
  450.         item->TopEdge = itedge;
  451.         item->Height = fheight;
  452.         if (ichk) {
  453.         item->Width += CHECKWIDTH;
  454.         itext = (struct IntuiTest *) item->ItemFill;
  455.         itext->LeftEdge = CHECKWIDTH;
  456.         }
  457.         itedge += fheight;
  458.         stxlen = 0;
  459.         schk = 0;
  460.         for (subitem = item->SubItem; subitem != NULL; subitem = subitem->NextItem) {
  461.         itext = (struct IntuiText *) subitem->ItemFill;
  462.         string = (char *) itext->IText;
  463.         stx = (short) TextLength(PLSRPort, string, (long) strlen(string));
  464.         stxlen = MAX(stxlen, stx);
  465.         if (subitem->Flags & CHECKIT)
  466.             schk = 1;
  467.         }
  468.         stedge = 0;
  469.         for (subitem = item->SubItem; subitem != NULL; subitem = subitem->NextItem) {
  470.         subitem->Width = stxlen;
  471.         subitem->LeftEdge = item->Width / 2;
  472.         subitem->TopEdge = stedge;
  473.         subitem->Height = fheight;
  474.         if (schk) {
  475.             subitem->Width += CHECKWIDTH;
  476.             itext = (struct IntuiTest *) subitem->ItemFill;
  477.             itext->LeftEdge = CHECKWIDTH;
  478.         }
  479.         stedge += fheight;
  480.         }
  481.     }
  482.     }
  483.  
  484.     if (PLCurPrefs.WinType & PLCUST) {
  485.     Menu0ItemScrSubs[PLMCUSTOM].Flags |= CHECKED;
  486.     Menu0ItemScrSubs[PLMWBENCH].Flags &= ~CHECKED;
  487.     Menu1Items[PLMLACE].Flags |= ITEMENABLED;
  488.     Menu1Items[PLMHIRES].Flags |= ITEMENABLED;
  489.     Menu1Items[PLMCOLORS].Flags |= ITEMENABLED;
  490.     }
  491.     else {
  492.     Menu0ItemScrSubs[PLMCUSTOM].Flags &= ~CHECKED;
  493.     Menu0ItemScrSubs[PLMWBENCH].Flags |= CHECKED;
  494.     }
  495.  
  496.     Menu1Item2Subs[PLMC2].Flags &= ~CHECKED;
  497.     Menu1Item2Subs[PLMC4].Flags &= ~CHECKED;
  498.     Menu1Item2Subs[PLMC8].Flags &= ~CHECKED;
  499.     Menu1Item2Subs[PLMC16].Flags &= ~CHECKED;
  500.     Menu1Item2Subs[PLCurPrefs.Depth - 1].Flags |= CHECKED;
  501.  
  502.     if (PLCurPrefs.ScrType & PLLACE)
  503.     Menu1Items[PLMLACE].Flags |= CHECKED;
  504.     else
  505.     Menu1Items[PLMLACE].Flags &= ~CHECKED;
  506.  
  507.     if (PLCurPrefs.ScrType & PLHIRES)
  508.     Menu1Items[PLMHIRES].Flags |= CHECKED;
  509.     else
  510.     Menu1Items[PLMHIRES].Flags &= ~CHECKED;
  511.  
  512.     if (PLCurPrefs.WinType & PLASP)
  513.     Menu0Items[PLMASPECT].Flags |= CHECKED;
  514.     else
  515.     Menu0Items[PLMASPECT].Flags &= ~CHECKED;
  516.  
  517.     if (PLCurPrefs.WinType & PLBUFF)
  518.     Menu0Items[PLMBUFF].Flags |= CHECKED;
  519.     else
  520.     Menu0Items[PLMBUFF].Flags &= ~CHECKED;
  521.  
  522.     SetMenuStrip(PLWindow, Menu);
  523. }
  524.  
  525. void 
  526. disablemenus(void)
  527. {
  528.     OffMenu(PLWindow, PLMCONTROL | SHIFTITEM(NOITEM));
  529.     OffMenu(PLWindow, PLMSCREEN | SHIFTITEM(NOITEM));
  530. }
  531.  
  532. void 
  533. enablemenus(void)
  534. {
  535.     OnMenu(PLWindow, PLMCONTROL | SHIFTITEM(NOITEM));
  536.     OnMenu(PLWindow, PLMSCREEN | SHIFTITEM(NOITEM));
  537. }
  538.  
  539. void 
  540. menuselect(ULONG class, USHORT code)
  541. {
  542.     PLINT ItemNumber, MenuNumber, SubNumber;
  543.     PLINT remake = 0;
  544.     struct MenuItem *Item;
  545.  
  546.     if (class == VANILLAKEY);
  547.     else if (class == MENUPICK) {
  548.     while (code != MENUNULL) {
  549.         Item = ItemAddress(Menu, code);
  550.         MenuNumber = MENUNUM(code);
  551.         ItemNumber = ITEMNUM(code);
  552.         SubNumber = SUBNUM(code);
  553.         if (MenuNumber == PLMCONTROL) {
  554.         if (ItemNumber == PLMSAVECONFIG) {
  555.             if (!(PLCurPrefs.WinType & PLCUST)) {
  556.             PLCurPrefs.WXPos = PLWindow->LeftEdge;
  557.             PLCurPrefs.WYPos = PLWindow->TopEdge;
  558.             }
  559.             else {
  560.             PLCurPrefs.CXPos = PLWindow->LeftEdge;
  561.             PLCurPrefs.CYPos = PLWindow->TopEdge;
  562.             }
  563.             SetPLDefs();
  564.         }
  565.         else if (ItemNumber == PLMRECONFIG) {
  566.             RestorePrefs();
  567.             remake = 1;
  568.         }
  569.         else if (ItemNumber == PLMASPECT) {
  570.             if (Item->Flags & CHECKED) {
  571.             PLCurPrefs.WinType |= PLASP;
  572.             }
  573.             else {
  574.             PLCurPrefs.WinType &= ~PLASP;
  575.             }
  576.             setlimits();
  577.             disablegads(0);
  578.             disablemenus();
  579.             remakeplot();
  580.             enablemenus();
  581.             enablegads();
  582.         }
  583.         else if (ItemNumber == PLMBUFF) {
  584.             if (Item->Flags & CHECKED) {
  585.             PLCurPrefs.WinType |= PLBUFF;
  586.             }
  587.             else {
  588.             PLCurPrefs.WinType &= ~PLBUFF;
  589.             }
  590.         }
  591.         else if (ItemNumber == PLMSCREENTYPE) {
  592.             if (SubNumber == PLMWBENCH) {
  593.             if (!(PLCurPrefs.WinType & PLCUST))
  594.                 goto reselect;
  595.             PLCurPrefs.CXPos = PLWindow->LeftEdge;
  596.             PLCurPrefs.CYPos = PLWindow->TopEdge;
  597.             PLCurPrefs.WinType &= ~PLCUST;
  598.             }
  599.             else if (SubNumber == PLMCUSTOM) {
  600.             if (PLCurPrefs.WinType & PLCUST)
  601.                 goto reselect;
  602.             /* Save wbench window position */
  603.             PLCurPrefs.WXPos = PLWindow->LeftEdge;
  604.             PLCurPrefs.WYPos = PLWindow->TopEdge;
  605.             PLCurPrefs.WinType |= PLCUST;
  606.             }
  607.             remake = 1;
  608.         }
  609.         else if (ItemNumber == PLMSCRDUMP) {
  610.             /* Disable system gadgets */
  611.             disablegads(SubNumber);
  612.             disablemenus();
  613.             screendump(SubNumber);
  614.             enablemenus();
  615.             enablegads();
  616.         }
  617.         else if (ItemNumber == PLMSIFF) {
  618.             disablegads(0);
  619.             disablemenus();
  620.             saveiff();
  621.             enablemenus();
  622.             enablegads();
  623.         }
  624.         }
  625.         else if (MenuNumber == PLMSCREEN) {
  626.         if (ItemNumber == PLMLACE) {
  627.             if (Item->Flags & CHECKED)
  628.             PLCurPrefs.ScrType |= PLLACE;
  629.             else
  630.             PLCurPrefs.ScrType &= ~PLLACE;
  631.             PLCurPrefs.CWidth = 0;
  632.             PLCurPrefs.CHeight = 0;
  633.             remake = 1;
  634.         }
  635.         else if (ItemNumber == PLMHIRES) {
  636.             if (Item->Flags & CHECKED)
  637.             PLCurPrefs.ScrType |= PLHIRES;
  638.             else
  639.             PLCurPrefs.ScrType &= ~PLHIRES;
  640.             PLCurPrefs.CWidth = 0;
  641.             PLCurPrefs.CHeight = 0;
  642.             remake = 1;
  643.         }
  644.         else if (ItemNumber == PLMCOLORS) {
  645.             if (SubNumber == PLMC2) {
  646.             if (PLCurPrefs.Depth == 1)
  647.                 goto reselect;
  648.             PLCurPrefs.Depth = 1;
  649.             }
  650.             else if (SubNumber == PLMC4) {
  651.             if (PLCurPrefs.Depth == 2)
  652.                 goto reselect;
  653.             PLCurPrefs.Depth = 2;
  654.             }
  655.             else if (SubNumber == PLMC8) {
  656.             if (PLCurPrefs.Depth == 3)
  657.                 goto reselect;
  658.             PLCurPrefs.Depth = 3;
  659.             }
  660.             else if (SubNumber == PLMC16) {
  661.             if (PLCurPrefs.Depth == 4)
  662.                 goto reselect;
  663.             PLCurPrefs.Depth = 4;
  664.             }
  665.             PLCurPrefs.CXPos = PLWindow->LeftEdge;
  666.             PLCurPrefs.CYPos = PLWindow->TopEdge;
  667.             remake = 1;
  668.         }
  669.         else if (ItemNumber == PLMCOLREQ) {
  670.             disablegads(1);
  671.             disablemenus();
  672.             plcolreq();
  673.             enablemenus();
  674.             enablegads();
  675.         }
  676.         }
  677.       reselect:
  678.         code = Item->NextSelect;
  679.     }
  680.     }
  681.     if (remake) {
  682.     ClosePLWind();
  683.     OpenPLWind();
  684.     setlimits();
  685.     disablegads(0);
  686.     disablemenus();
  687.     remakeplot();
  688.     enablemenus();
  689.     enablegads();
  690.     }
  691. }
  692.